Una convenci�n de nombrado, como la del LDAP o la del sistema de ficheros, normalmente tiene metacaracters. Por ejemplo, en LDAP, si uno de los siguientes caracteres aparece en el nombre, debe est�r precedido por el caracter de escape, la barra invertida("\").
- Un espacio o un caracter "#" que ocurren al principio del string
- Un caracter espacio que ocurre al final del string
- Uo de los caracteres ",", "+", """, "\", "<", ">" o ";"
Cuando est�mos especificando un nombre a uno de los m�todos de Context, no s�lo debemos prestar atenci�n a los caracteres especiales y a las convenciones de nombrado del sistema de nombres subyacente. Tamb�en debemos prestar atenci�n a la s�ntaxis de nombres mixtos de JNDI, que tambi�n define caracteres especuales. La cambinaci�n de las dos s�ntaxis podr�a tratar con muchos niveles de escape.
Por ejemplo, supongamos que tenemos un atributo "cn" cuyo valor contiene un caracter de barra invertida.
backslash\a
El LDAP requiere que el caracter de barra invertida de un nombre sea escapado.
Por lo tanto cuando usemos este atributo como un nombre LDAP, deberemos preceder el caracter de barra invertida en su valor con otro caracter de barra invertida, de esta forma.
cn=backslash\\a
El caracter de barra invertida tambi�n es un caracter especial JNDI, por eso si suministramos este nombre string como un nombre mixto, debemos escapar las barras invertidas, de nuevo precediendo a cada caracter de barra invertida.
cn=backslash\\\\a
Si especificamos esto como un literal en el lenguaje de programaci�n Java, debemos seguir los requerimientos del lenguaje Java y escapar las barras invertidas dentro de un string literal con otra barra invertida.
String cname = "cn=backslash\\\\\\\\a";
�Nombres String y Nombres Mixtos
Necesitamos tener en cuenta que los nombres string que pasamos a los m�todos de Context son nombres mixtos. Para evitar cualquier sorpresa si un nombre contiene caracteres especiales que podr�an entrar en conflicto con la s�ntaxis de nombres mixtos JNDI, deber�amos usar los m�todos de Context que aceptan un Name.
Hay dos formas disponibles para hacer esto. La primera forma es usar un CompositeName.
Creamos un objeto CompositeName y le a�adimos el nombre espec�fico del sistema de nombres (como un nombre LDAP). Aqu� hay un ejemplo.
String dn = ...; // An LDAP distinguished name Name composite = new CompositeName().add(dn); Object obj = ctx.lookup(composite);
Aplicando esta t�cnica al anterior ejemplo de nombre LDAP, ya no necesitar�amos a�adir manualmente escapes para la s�ntaxis JNDI porque los manejar�a autom�ticamente la clase CompositeName:
Name composite = new CompositeName().add("cn=backslash\\\\a");
Object obj = ctx.lookup(composite);
La segunda forma es usar un nombre compuesto. Creamos un nombre compuesto convirtiendo el nombre especifico del sistema de nombres (como un nombre LDAP).
Aqu� tenemos un ejemplo.
String dn = ...; // An LDAP distinguished name
NameParser ldapParser = ctx.getNameParser("");
Name compound = ldapParser.parse(dn);
Object obj = ctx.lookup(compound);
Aplicando esta t�cnica al nombre LDAP del ejemplo anterior, no necesitariamos a�adir escapes para la s�ntaxis JNDI porque no estamos usando nombres mixtos JNDI.
Name compound = ldapParser.parse("cn=backslash\\\\a");
Object obj = ctx.lookup(compound);